﻿#include "Toast.h"
#include <QGuiApplication>
#include <QScreen>
#include <QLabel>
#include <QTimer>
#include <QHboxLayout>
/// @brief 创建一个新的 Toast 对象，用于显示指定消息，持续指定时间。
/// @param message 要显示的消息文本。
/// @param duration 消息显示的持续时间（以毫秒为单位）。
Toast::Toast(const QString& message, int duration)
{
    setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); // 设置为工具窗口且无边框
    setAttribute(Qt::WA_DeleteOnClose);
    this->setStyleSheet("background-color: #393939;"); // 设置背景颜色为半透明黑色
    /* 设置位置, 位于窗口正下方 */
    const static uint WIDTH        = 500;
    const static uint HEIGHT       = 50;
    const static uint DOWN_MARGIN  = 80;                               // 距离底部的边距
    const QScreen*    screen       = QGuiApplication::primaryScreen(); // 获取主屏幕
    int               screenWidth  = screen->geometry().width();
    int               screenHeight = screen->geometry().height();
    setGeometry((screenWidth - WIDTH) / 2, screenHeight - HEIGHT - DOWN_MARGIN, WIDTH, HEIGHT);
    /* 创建主布局 */
    QHBoxLayout* mainLayout = new QHBoxLayout(this);
    mainLayout->setContentsMargins(0, 0, 0, 0); // 移除边距
    setLayout(mainLayout);
    /* 创建标签并设置属性 */
    QLabel* label = new QLabel(this);
    label->setText(message);
    label->setAlignment(Qt::AlignCenter); // 确保文本居中
    label->setStyleSheet("QLabel { font-size: 32px; color: white; padding: 0px; }");
    label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    mainLayout->addWidget(label);
    /* 定时器 */
    QTimer::singleShot(duration, this, &Toast::close);
}

/// @brief 显示短暂消息提示框
/// @param message 消息内容
/// @param duration 显示持续时间（毫秒）
void Toast::showMessage(const QString& message, int duration)
{
    Toast* toast = new Toast(message, duration);
    toast->show();
}
